React Refsλ₯Ό μ¬μΈ΅μ μΌλ‘ νꡬνκ³ useRefμ createRefμ μ΄μ μ λ§μΆ μ’ ν© κ°μ΄λμ λλ€. μ μ μ ν리μΌμ΄μ μμ ν¨μ¨μ μΈ μ»΄ν¬λνΈ κ΄λ¦¬ λ° DOM μ κ·Όμ μν΄ κ°κ°μ μΈμ , μ΄λ»κ² μ¬μ©ν΄μΌ νλμ§ μμ보μΈμ.
React Refs: useRef vs. createRef μ¬μΈ΅ λΆμ
React κ°λ°μ μλμ μΈ μΈκ³μμ μ»΄ν¬λνΈ μνλ₯Ό ν¨μ¨μ μΌλ‘ κ΄λ¦¬νκ³ λ¬Έμ κ°μ²΄ λͺ¨λΈ(DOM)κ³Ό μνΈμμ©νλ κ²μ λ§€μ° μ€μν©λλ€. React Refsλ DOM μμλ React μ»΄ν¬λνΈμ μ§μ μ κ·Όνκ³ μ‘°μν μ μλ λ©μ»€λμ¦μ μ 곡ν©λλ€. Refλ₯Ό μμ±νλ λ κ°μ§ μ£Όμ λ°©λ²μ useRefμ createRefμ
λλ€. λ λ€ Refλ₯Ό μμ±νλ λͺ©μ μ κ°μ§λ§, ꡬν λ°©μκ³Ό μ¬μ© μ¬λ‘μμ μ°¨μ΄κ° μμ΅λλ€. μ΄ κ°μ΄λλ μ΄ λ κ°μ§ μ κ·Ό λ°©μμ λͺ
νν μ€λͺ
νκ³ , νΉν μ μ μ¬μ©μλ₯Ό λμμΌλ‘ κ°λ°ν λ React νλ‘μ νΈμμ κ°κ°μ μΈμ , μ΄λ»κ² ν¨κ³Όμ μΌλ‘ νμ©ν μ μλμ§μ λν λͺ
νμ±μ μ 곡νλ κ²μ λͺ©νλ‘ ν©λλ€.
React Refs μ΄ν΄νκΈ°
Ref(μ°Έμ‘°μ μ½μ΄)λ DOM λ Έλ λλ React μ»΄ν¬λνΈμ μ§μ μ κ·Όν μ μλλ‘ ν΄μ£Όλ React κΈ°λ₯μ λλ€. μ΄λ λ€μκ³Ό κ°μ κ²½μ°μ νΉν μ μ©ν©λλ€:
- μ λ ₯ νλμ ν¬μ»€μ€λ₯Ό λ§μΆλ λ± DOM μμλ₯Ό μ§μ μ‘°μν΄μΌ ν λ.
- μμ μ»΄ν¬λνΈμ λ©μλ λλ μμ±μ μ κ·Όν΄μΌ ν λ.
- 리λ λλ§μ μ λ°νμ§ μκ³ λ λλ§ μ λ°μ κ±Έμ³ μ§μλλ κ°μ κ΄λ¦¬ν λ (ν΄λμ€ μ»΄ν¬λνΈμ μΈμ€ν΄μ€ λ³μμ μ μ¬).
Reactλ UIκ° μνμ propsλ₯Ό ν΅ν΄ κ΄λ¦¬λλ μ μΈμ μ κ·Ό λ°©μμ κΆμ₯νμ§λ§, μ§μ μ μΈ μ‘°μμ΄ νμν μν©λ μμ΅λλ€. Refsλ Reactμ μ μΈμ νΉμ±κ³Ό λͺ λ Ήν DOM μμ μ¬μ΄μ κ°κ·Ήμ λ©μΈ μ μλ λ°©λ²μ μ 곡ν©λλ€.
createRef: ν΄λμ€ μ»΄ν¬λνΈ μ κ·Ό λ°©μ
createRefλ Reactμμ μ 곡νλ λ©μλμ
λλ€. μ£Όλ‘ ν΄λμ€ μ»΄ν¬λνΈ λ΄μμ Refλ₯Ό μμ±νλ λ° μ¬μ©λ©λλ€. ν΄λμ€ μ»΄ν¬λνΈκ° μΈμ€ν΄μ€νλ λλ§λ€ createRefλ μλ‘μ΄ Ref κ°μ²΄λ₯Ό μμ±ν©λλ€. μ΄λ μ»΄ν¬λνΈμ κ° μΈμ€ν΄μ€κ° κ³ μ ν Refλ₯Ό κ°λλ‘ λ³΄μ₯ν©λλ€.
ꡬ문 λ° μ¬μ©λ²
createRefλ₯Ό μ¬μ©νλ €λ©΄ λ¨Όμ ν΄λμ€ μ»΄ν¬λνΈ, μΌλ°μ μΌλ‘ μμ±μμμ Refλ₯Ό μ μΈν©λλ€. κ·Έλ° λ€μ ref μμ±μ μ¬μ©νμ¬ Refλ₯Ό DOM μμ λλ μ»΄ν¬λνΈμ μ°κ²°ν©λλ€.
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.myRef = React.createRef();
}
componentDidMount() {
// μ»΄ν¬λνΈκ° λ§μ΄νΈλ ν DOM μμμ μ κ·Ό
this.myRef.current.focus();
}
render() {
return ;
}
}
μ΄ μμμμ this.myRefλ React.createRef()λ₯Ό μ¬μ©νμ¬ μμ±λ©λλ€. κ·Έλ° λ€μ input μμμ ref μμ±μ ν λΉλ©λλ€. μ»΄ν¬λνΈκ° λ§μ΄νΈλ ν(componentDidMountμμ) this.myRef.currentλ₯Ό μ¬μ©νμ¬ μ€μ DOM λ
Έλμ μ κ·Όνκ³ μμ
μ μνν μ μμ΅λλ€(μ΄ κ²½μ° inputμ ν¬μ»€μ€).
μμ: μ λ ₯ νλμ ν¬μ»€μ€νκΈ°
μ»΄ν¬λνΈκ° λ§μ΄νΈλ λ μ λ ₯ νλμ μλμΌλ‘ ν¬μ»€μ€λ₯Ό λ§μΆκ³ μΆμ μλ리μ€λ₯Ό μκ°ν΄ λ΄ μλ€. μ΄λ Refμ μΌλ°μ μΈ μ¬μ© μ¬λ‘μ΄λ©°, νΉν μμμ΄λ λνν μμμμ κ·Έλ μ΅λλ€.
class FocusInput extends React.Component {
constructor(props) {
super(props);
this.inputRef = React.createRef();
}
componentDidMount() {
this.inputRef.current.focus();
}
render() {
return (
);
}
}
μ΄ μμμμ FocusInputμ λ§μ΄νΈλ μ§ν μ
λ ₯ νλμ ν¬μ»€μ€λ₯Ό λ§μΆ₯λλ€. μ΄λ μ»΄ν¬λνΈκ° λ λλ§λμλ§μ μ¬μ©μμ μ£Όμλ₯Ό μ
λ ₯ μμλ‘ μ λνμ¬ μ¬μ©μ κ²½νμ κ°μ ν μ μμ΅λλ€.
Important Considerations with createRef
- ν΄λμ€ μ»΄ν¬λνΈ μ μ©:
createRefλ ν΄λμ€ μ»΄ν¬λνΈμμ μ¬μ©νλλ‘ μ€κ³λμμ΅λλ€. κΈ°μ μ μΌλ‘ ν¨μν μ»΄ν¬λνΈμμλ μλν μ μμ§λ§, μλλ μ¬μ©λ²μ΄ μλλ©° μκΈ°μΉ μμ λμμΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€. - κ° μΈμ€ν΄μ€μ λν μ Ref: ν΄λμ€ μ»΄ν¬λνΈμ κ° μΈμ€ν΄μ€λ μ체
createRefλ₯Ό μ»μ΅λλ€. μ΄λ μ»΄ν¬λνΈ μΈμ€ν΄μ€ κ°μ 격리λ₯Ό μ μ§νλ λ° μ€μν©λλ€.
useRef: ν¨μν μ»΄ν¬λνΈ Hook
useRefλ React 16.8μμ λμ
λ Hookμ
λλ€. ν¨μν μ»΄ν¬λνΈ λ΄μμ λ³κ²½ κ°λ₯ν Ref κ°μ²΄λ₯Ό μμ±νλ λ°©λ²μ μ 곡ν©λλ€. createRefμ λ¬λ¦¬ useRefλ μ»΄ν¬λνΈκ° λ λλ§λ λλ§λ€ λμΌν Ref κ°μ²΄λ₯Ό λ°νν©λλ€. μ΄λ‘ μΈν΄ 리λ λλ§μ μ λ°νμ§ μκ³ λ λλ§ μ λ°μ κ±Έμ³ κ°μ μ μ§νλ λ° μ΄μμ μ
λλ€.
ꡬ문 λ° μ¬μ©λ²
useRefλ₯Ό μ¬μ©νλ κ²μ κ°λ¨ν©λλ€. μ΄κΈ° κ°μ μ λ¬νμ¬ useRef Hookμ νΈμΆν©λλ€. Hookμ .current μμ±μ κ°μ§ κ°μ²΄λ₯Ό λ°ννλ©°, μ΄λ₯Ό μ¬μ©νμ¬ κ°μ μ κ·Όνκ³ μμ ν μ μμ΅λλ€.
import React, { useRef, useEffect } from 'react';
function MyFunctionalComponent() {
const myRef = useRef(null);
useEffect(() => {
// μ»΄ν¬λνΈκ° λ§μ΄νΈλ ν DOM μμμ μ κ·Ό
if (myRef.current) {
myRef.current.focus();
}
}, []);
return ;
}
μ΄ μμμμ useRef(null)μ μ΄κΈ° κ°μ΄ nullμΈ Refλ₯Ό μμ±ν©λλ€. useEffect Hookμ μ»΄ν¬λνΈκ° λ§μ΄νΈλ ν DOM μμμ μ κ·Όνλ λ° μ¬μ©λ©λλ€. myRef.current μμ±μ input μμμ λν μ°Έμ‘°λ₯Ό 보μ νμ¬ ν¬μ»€μ€λ₯Ό λ§μΆ μ μλλ‘ ν©λλ€.
μμ: μ΄μ prop κ° μΆμ νκΈ°
useRefμ κ°λ ₯ν μ¬μ© μ¬λ‘ μ€ νλλ propμ μ΄μ κ°μ μΆμ νλ κ²μ
λλ€. Ref λ³κ²½μ 리λ λλ§μ μ λ°νμ§ μμΌλ―λ‘, UIμ μν₯μ λ―ΈμΉμ§ μκ³ λ λλ§ μ λ°μ κ±Έμ³ μ μ§νλ €λ κ°μ μ μ₯νλ λ° μ¬μ©ν μ μμ΅λλ€.
import React, { useRef, useEffect } from 'react';
function PreviousValueComponent({ value }) {
const previousValue = useRef();
useEffect(() => {
previousValue.current = value;
}, [value]);
return (
Current Value: {value}
Previous Value: {previousValue.current}
);
}
μ΄ μμμμ previousValue.currentλ value propμ μ΄μ κ°μ μ μ₯ν©λλ€. useEffect Hookμ value propμ΄ λ³κ²½λ λλ§λ€ Refλ₯Ό μ
λ°μ΄νΈν©λλ€. μ΄λ₯Ό ν΅ν΄ νμ¬ κ°κ³Ό μ΄μ κ°μ λΉκ΅ν μ μμΌλ©°, μ΄λ λ³κ²½ μ¬νμ κ°μ§νκ±°λ μ λλ©μ΄μ
μ ꡬννλ λ° μ μ©ν μ μμ΅λλ€.
Important Considerations with useRef
- ν¨μν μ»΄ν¬λνΈ μ μ©:
useRefλ Hookμ΄λ©° ν¨μν μ»΄ν¬λνΈ λλ μ¬μ©μ μ μ Hook λ΄μμλ§ μ¬μ©ν μ μμ΅λλ€. - λ λλ§ μ λ°μ κ±Έμ³ μ§μ:
useRefHookμ λͺ¨λ λ λλ§μμ λμΌν Ref κ°μ²΄λ₯Ό λ°νν©λλ€. μ΄λ 리λ λλ§μ μ λ°νμ§ μκ³ κ°μ μ μ§νλ λ₯λ ₯μ ν΅μ¬μ λλ€. - λ³κ²½ κ°λ₯ν
.currentμμ±: Ref κ°μ²΄μ.currentμμ±μ μ§μ μμ ν μ μμ΅λλ€. - μ΄κΈ° κ°:
useRefμ μ΄κΈ° κ°μ μ 곡ν μ μμ΅λλ€. μ΄ κ°μ μ»΄ν¬λνΈκ° μ²μ λ λλ§λ λ.currentμμ±μ ν λΉλ©λλ€. - 리λ λλ§ μμ: Refμ
.currentμμ±μ μμ ν΄λ μ»΄ν¬λνΈ λ¦¬λ λλ§μ΄ λ°μνμ§ μμ΅λλ€.
useRef vs. createRef: μμΈ λΉκ΅
μ΄μ useRefμ createRefλ₯Ό κ°κ° μ΄ν΄λ³΄μμΌλ―λ‘, μ£Όμ μ°¨μ΄μ κ³Ό μΈμ μ΄λ€ κ²μ μ νν΄μΌ νλμ§λ₯Ό κ°μ‘°νκΈ° μν΄ λλν λΉκ΅ν΄ λ³΄κ² μ΅λλ€.
| κΈ°λ₯ | useRef |
createRef |
|---|---|---|
| μ»΄ν¬λνΈ μ ν | ν¨μν μ»΄ν¬λνΈ | ν΄λμ€ μ»΄ν¬λνΈ |
| Hook λλ λ©μλ | Hook | λ©μλ |
| Ref μΈμ€ν΄μ€ | λͺ¨λ λ λλ§μμ λμΌν Ref κ°μ²΄ λ°ν | μ»΄ν¬λνΈμ κ° μΈμ€ν΄μ€μμ μλ‘μ΄ Ref κ°μ²΄ μμ± |
| μ¬μ© μ¬λ‘ |
|
|
μ¬λ°λ₯Έ Ref μ ννκΈ°: κ²°μ κ°μ΄λ
useRefμ createRef μ€μμ μ ννλ λ° λμμ΄ λλ κ°λ¨ν κ°μ΄λμ
λλ€:
- ν¨μν μ»΄ν¬λνΈλ‘ μμ
μ€μ΄μ κ°μ?
useRefλ₯Ό μ¬μ©νμΈμ. - ν΄λμ€ μ»΄ν¬λνΈλ‘ μμ
μ€μ΄μ κ°μ?
createRefλ₯Ό μ¬μ©νμΈμ. - 리λ λλ§μ μ λ°νμ§ μκ³ λ λλ§ μ λ°μ κ±Έμ³ κ°μ μ μ§ν΄μΌ νλμ?
useRefλ₯Ό μ¬μ©νμΈμ. - propμ μ΄μ κ°μ μΆμ ν΄μΌ νλμ?
useRefλ₯Ό μ¬μ©νμΈμ.
DOM μ‘°μμ λμ΄: Refμ κ³ κΈ μ¬μ© μ¬λ‘
DOM μμμ μ κ·Όνκ³ μ‘°μνλ κ²μ΄ Refμ μ£Όμ μ¬μ© μ¬λ‘μ΄μ§λ§, μ΄λ¬ν ν΅μ¬ κΈ°λ₯ μ΄μμΌλ‘ λ€μν κ°λ₯μ±μ μ 곡ν©λλ€. Refκ° νΉν μ μ©ν μ μλ λͺ κ°μ§ κ³ κΈ μλ리μ€λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€.
1. μμ μ»΄ν¬λνΈ λ©μλ μ κ·Ό
Refλ μμ μ»΄ν¬λνΈμ μ μλ λ©μλμ μ κ·Όνλ λ° μ¬μ©λ μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ λΆλͺ¨ μ»΄ν¬λνΈκ° μμμΌλ‘λΆν° μ§μ μμ μ νΈλ¦¬κ±°νκ±°λ λ°μ΄ν°λ₯Ό κ²μν μ μμ΅λλ€. μ΄ μ κ·Ό λ°©μμ μμ μ»΄ν¬λνΈμ λν μΈλ°ν μ μ΄κ° νμν λ νΉν μ μ©ν©λλ€.
class ParentComponent extends React.Component {
constructor(props) {
super(props);
this.childRef = React.createRef();
}
handleClick = () => {
// μμ μ»΄ν¬λνΈμ λ©μλ νΈμΆ
this.childRef.current.doSomething();
};
render() {
return (
);
}
}
class ChildComponent extends React.Component {
doSomething = () => {
console.log('μμ μ»΄ν¬λνΈ μ‘μ
μ΄ νΈλ¦¬κ±°λμμ΅λλ€!');
};
render() {
return μ΄κ²μ μμ μ»΄ν¬λνΈμ
λλ€.;
}
}
μ΄ μμμμ ParentComponentλ Refλ₯Ό μ¬μ©νμ¬ ChildComponentμ μ κ·Όνκ³ doSomething λ©μλλ₯Ό νΈμΆν©λλ€.
2. ν¬μ»€μ€ λ° μ ν κ΄λ¦¬
Refλ μ λ ₯ νλ λ° κΈ°ν λνν μμ λ΄μμ ν¬μ»€μ€μ μ νμ κ΄λ¦¬νλ λ° λ§€μ° μ μ©ν©λλ€. μ΄λ μ κ·Όμ± λκ³ μ¬μ©μ μΉνμ μΈ μΈν°νμ΄μ€λ₯Ό λ§λλ λ° μ€μν©λλ€.
import React, { useRef, useEffect } from 'react';
function FocusOnMount() {
const inputRef = useRef(null);
useEffect(() => {
if (inputRef.current) {
inputRef.current.focus();
inputRef.current.select(); // μ
λ ₯ νλμ ν
μ€νΈ μ ν
}
}, []);
return ;
}
μ΄ μμλ μ»΄ν¬λνΈκ° λ§μ΄νΈλμλ§μ μ λ ₯ νλμ ν¬μ»€μ€λ₯Ό λ§μΆκ³ ν μ€νΈλ₯Ό μ νν©λλ€.
3. μμ μ λλ©μ΄μ
Refλ μ λλ©μ΄μ λΌμ΄λΈλ¬λ¦¬(μ: GreenSock λλ Framer Motion)μ ν¨κ» μ¬μ©νμ¬ DOMμ μ§μ μ‘°μνκ³ λ³΅μ‘ν μ λλ©μ΄μ μ λ§λ€ μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ λλ©μ΄μ μνμ€λ₯Ό μΈλ°νκ² μ μ΄ν μ μμ΅λλ€.
λ¨μνλ₯Ό μν μΌλ° JavaScript μμ:
import React, { useRef, useEffect } from 'react';
function AnimatedBox() {
const boxRef = useRef(null);
useEffect(() => {
const box = boxRef.current;
if (box) {
// κ°λ¨ν μ λλ©μ΄μ
: μμλ₯Ό μ€λ₯Έμͺ½μΌλ‘ μ΄λ
box.animate(
[
{ transform: 'translateX(0)' },
{ transform: 'translateX(100px)' },
],
{
duration: 1000, // 1μ΄
iterations: Infinity, // 무ν λ°λ³΅
direction: 'alternate',
}
);
}
}, []);
return ;
}
μ΄ μμλ μΉ μ λλ©μ΄μ APIλ₯Ό μ¬μ©νμ¬ κ°λ¨ν μμλ₯Ό μνμΌλ‘ μλ€λ‘ μμ§μ΄λ μ λλ©μ΄μ μ λ§λλλ€.
μ μ μ ν리μΌμ΄μ μμ React Refs μ¬μ©μ μν λͺ¨λ² μ¬λ‘
μ μ μ¬μ©μλ₯Ό λμμΌλ‘ React μ ν리μΌμ΄μ μ κ°λ°ν λ, Refκ° κ΅μ ν(i18n) λ° μ§μν(l10n)μ μ΄λ»κ² μνΈμμ©νλμ§ κ³ λ €νλ κ²μ΄ μ€μν©λλ€. λ€μμ λͺ κ°μ§ λͺ¨λ² μ¬λ‘μ λλ€:
1. μ κ·Όμ± (A11y)
Ref μ¬μ©μ΄ μ κ·Όμ±μ λΆμ μ μΈ μν₯μ λ―ΈμΉμ§ μλλ‘ νμμμ€. μλ₯Ό λ€μ΄, νλ‘κ·Έλλ° λ°©μμΌλ‘ μμμ ν¬μ»€μ€λ₯Ό λ§μΆ λ μ¬μ©μμ ν¬μ»€μ€ μμμ ν¬μ»€μ€ λ³κ²½μ΄ μ€ν¬λ¦° 리λ λ° ν€λ³΄λ μ¬μ©μμκ² μ μ νμ§ κ³ λ €νμμμ€.
import React, { useRef, useEffect } from 'react';
function AccessibleFocus() {
const buttonRef = useRef(null);
useEffect(() => {
const button = buttonRef.current;
if (button) {
// λ²νΌμ΄ μ¬μ©μμκ² μ΄λ―Έ ν¬μ»€μ€λμ΄ μμ§ μμ κ²½μ°μλ§ ν¬μ»€μ€
if (document.activeElement !== button) {
button.focus();
}
}
}, []);
return ;
}
2. κ΅μ νλ μ λ ₯ νλ
μ λ ₯ νλλ‘ μμ ν λ, λ€λ₯Έ μΈμ΄μμ μ¬μ©λλ λ€μν μ λ ₯ λ°©μκ³Ό λ¬Έμ μΈνΈμ μ μνμμμ€. Ref κΈ°λ° μ‘°μ(μ: μ ν, 컀μ μμΉ)μ΄ λ€μν μ λ ₯ μ νκ³Ό λ‘μΌμΌμμ μ¬λ°λ₯΄κ² μλνλμ§ νμΈνμμμ€. λ€λ₯Έ μΈμ΄μ μ λ ₯ λ°©μμΌλ‘ μ»΄ν¬λνΈλ₯Ό μ² μ ν ν μ€νΈνμμμ€.
3. μ€λ₯Έμͺ½μμ μΌμͺ½(RTL) λ μ΄μμ
μ ν리μΌμ΄μ μ΄ RTL μΈμ΄(μ: μλμ΄, νλΈλ¦¬μ΄)λ₯Ό μ§μνλ κ²½μ°, Refλ₯Ό μ¬μ©νλ DOM μ‘°μμ΄ λ°μ λ λ μ΄μμμ κ³ λ €νλμ§ νμΈνμμμ€. μλ₯Ό λ€μ΄, μμλ₯Ό μ λλ©μ΄μ ν λ RTL μΈμ΄μ μ λλ©μ΄μ λ°©ν₯μ λ°μ μν€λ κ²μ κ³ λ €νμμμ€.
4. μ±λ₯ κ³ λ € μ¬ν
Refλ DOMκ³Ό μνΈμμ©νλ κ°λ ₯ν λ°©λ²μ μ 곡νμ§λ§, κ³Όλνκ² μ¬μ©νλ©΄ μ±λ₯ λ¬Έμ λ₯Ό μΌμΌν¬ μ μμ΅λλ€. μ§μ μ μΈ DOM μ‘°μμ Reactμ κ°μ DOM λ° μ¬μ‘°μ νλ‘μΈμ€λ₯Ό μ°ννμ¬ λΆμΌμΉ λ° λλ¦° μ λ°μ΄νΈλ‘ μ΄μ΄μ§ μ μμ΅λλ€. Refλ μ μ€νκ² κ·Έλ¦¬κ³ νμν λλ§ μ¬μ©νμμμ€.
κ²°λ‘
React Refs, νΉν useRefμ createRefλ React κ°λ°μμκ² νμμ μΈ λꡬμ
λλ€. κ° μ κ·Ό λ°©μμ λμμ€λ₯Ό μ΄ν΄νκ³ μΈμ ν¨κ³Όμ μΌλ‘ μ μ©ν΄μΌ νλμ§ μλ κ²μ κ²¬κ³ νκ³ μ±λ₯ μ’μ μ ν리μΌμ΄μ
μ ꡬμΆνλ λ° μ€μν©λλ€. createRefλ ν΄λμ€ μ»΄ν¬λνΈ λ΄μμ Refλ₯Ό κ΄λ¦¬νλ νμ€μΌλ‘ λ¨μ μμΌλ©°, κ° μΈμ€ν΄μ€κ° κ³ μ ν Refλ₯Ό κ°λλ‘ λ³΄μ₯ν©λλ€. λ λλ§ μ λ°μ κ±Έμ³ μ§μλλ νΉμ±μ κ°μ§ useRefλ ν¨μν μ»΄ν¬λνΈμ μ΄μμ μ΄λ©°, DOM μμλ₯Ό κ΄λ¦¬νκ³ λΆνμν 리λ λλ§μ μ λ°νμ§ μκ³ κ°μ μ μ§νλ λ°©λ²μ μ 곡ν©λλ€. μ΄λ¬ν λꡬλ₯Ό νλͺ
νκ² νμ©ν¨μΌλ‘μ¨, μ κ·Όμ± λκ³ μ±λ₯ μ’μ μΈν°νμ΄μ€λ‘ μ μΈκ³ μ¬μ©μλ₯Ό λ§μ‘±μν€λ React μ ν리μΌμ΄μ
μ κΈ°λ₯κ³Ό μ¬μ©μ κ²½νμ ν₯μμν¬ μ μμ΅λλ€.
Reactκ° κ³μ λ°μ ν¨μ λ°λΌ, μ΄λ¬ν κΈ°λ³Έ κ°λ μ μλ¬νλ©΄ μ§λ¦¬μ , λ¬Ένμ κ²½κ³λ₯Ό μ΄μνλ νμ μ μ΄κ³ μ¬μ©μ μΉνμ μΈ μΉ κ²½νμ λ§λ€ μ μμ΅λλ€. μ§μ μΌλ‘ μ μΈκ³μ μΈ μ ν리μΌμ΄μ μ μ 곡νκΈ° μν΄ μ κ·Όμ±, κ΅μ ν λ° μ±λ₯μ μ°μ μνλ κ²μ κΈ°μ΅νμμμ€.